/**
  ******************************************************************************
  * @author  泽耀科技 ASHINING
  * @version V3.0
  * @date    2016-10-08
  * @brief   主函数C文件
  ******************************************************************************
  * @attention
  *
  * 官网	:	http://www.ashining.com
  * 淘宝	:	https://shop105912646.taobao.com
  * 阿里巴巴:	https://cdzeyao.1688.com
  ******************************************************************************
  */



#include "main.h"					//main.h 中含有TX/RX、软件SPI/硬件SPI选择配置选项
#include "drv_cc1101.h"
#include "lpm.h"
const char *g_Ashining = "ashining";
uint8_t g_TxMode = 0;
uint8_t g_UartRxBuffer[ 100 ] = { 0 };
uint8_t g_RF24L01RxBuffer[ 32 ] = { 0 }; 


#if 0
/**
  * @brief :主函数 
  * @param :无
  * @note  :无
  * @retval:无
  */ 
int main( void )
{	
	uint8_t i = 0;
	stc_lpm_config_t stcLpmCfg;
	HALL_INIT();
	HALL_ENABLE();
	//警告！！！为防止程序进入低功耗无法调试，请勿删除以下两行代码
    SK_SW2_INIT();
    // NextStep();
	{ 
		//while (TRUE == Gpio_GetIO(1,5))
		{
			int a  = 0;
		}
        delay1ms(2000);\
	}
	//串口初始化
//	drv_uart_init( 9600 );
	
	//LED初始化
	drv_led_init( );
	
	//SPI初始化
	drv_spi_init( );
	
	//CC1101初始化
	CC1101_Init( );
	for( i = 0; i < 6; i++ )
	{
		led_red_flashing( );
		led_green_flashing( );
		delay1ms( 500 );
	}
	
#ifdef	RADIO_TX		
//=========================================================================================//	
//*****************************************************************************************//
//************************************* 发送 **********************************************//
//*****************************************************************************************//
//=========================================================================================//	
	
	//按键初始化
	drv_button_init( );

	Clk_SetFunc(ClkFuncWkupRCH, TRUE);

	//Lpm Cfg
    stcLpmCfg.enSEVONPEND   = SevPndDisable;
    stcLpmCfg.enSLEEPDEEP   = SlpDpEnable;
    stcLpmCfg.enSLEEPONEXIT = SlpExtDisable;
    Lpm_Config(&stcLpmCfg);
	while( 1 )	
	{
// 		//模式切换
// 		if( BUTOTN_PRESS_DOWN == drv_button_check( ))
// 		{
// 			g_TxMode = 1 - g_TxMode;		//模式会在 TX_MODE_1( 0 ),TX_MODE_2( 1 )之间切换
			
// 			//状态显示清零
// 			led_green_off( );
// 			led_red_off( );
			
// 			if( TX_MODE_1 == g_TxMode )
// 			{
// 				for( i = 0; i < 6; i++ )		
// 				{
// 					led_red_flashing( );	//固定发送模式，红灯闪烁3次
// 					delay1ms( 500 );		
// 				}
// 			}
// 			else
// 			{
// 				for( i = 0; i < 6; i++ )
// 				{
// 					led_green_flashing( );	//串口发送模式，绿灯闪烁3次
// 					delay1ms( 500 );
// 				}
// 			}
// 		}
		
// 		//发送
// 		if( TX_MODE_1 == g_TxMode )
// 		{
// 			CC1101_Tx_Packet( (uint8_t *)g_Ashining, 8 , ADDRESS_CHECK );		//模式1发送固定字符,1S一包
// 			delay1ms( 1000 );	
// 			led_red_flashing( );			
// 		}
// 		else
// 		{	
// 			//查询串口数据
// //			i = drv_uart_rx_bytes( g_UartRxBuffer );
			
// 			if( 0 != i )
// 			{
// 				CC1101_Tx_Packet( g_UartRxBuffer, i , ADDRESS_CHECK );
// 				led_red_flashing( );
// 			}
// 		}
		drv_led_off( LED_RED );
		drv_led_off( LED_GREEN );
		
        // MCU 进入 DeepSleep，等待外部中断唤醒
		//Lpm_GotoLpmMode();
        // 唤醒后检查标志
        if(g_key_flag)
        {
            g_key_flag = 0;

            // uint8_t txBuf[2] = {0xAA, 0x55}; // 示例数据

            // // 唤醒 CC1101
            // CC1101_WakeUp();
            // delay1ms(2); // 等待稳定

            // // 发送一次数据
            // CC1101_Tx(txBuf, sizeof(txBuf));

            // // 发送完再进入休眠
            // CC1101_Strobe(CC1101_SPWD);
			for( i = 0; i < 6; i++ )
			{
				led_red_flashing( );
				led_green_flashing( );
				delay1ms( 500 );
			}
        }
		

	}
	
#else		
//=========================================================================================//	
//*****************************************************************************************//
//************************************* 接收 **********************************************//
//*****************************************************************************************//
//=========================================================================================//	
	
	while( 1 )
	{
		CC1101_Clear_RxBuffer( );
		CC1101_Set_Mode( RX_MODE );
		i = CC1101_Rx_Packet( g_RF24L01RxBuffer );		//接收字节
		if( 0 != i )
		{
			led_green_flashing( );
			drv_uart_tx_bytes( g_RF24L01RxBuffer, i );	//输出接收到的字节
		}
	}
		
#endif
	
}
#endif
int32_t main(void)
{    stc_lpm_config_t stcLpmCfg;
	int i;
		HALL_INIT();
		HALL_ENABLE();
    //SW2 控制程序继续运行
    SK_SW2_INIT();
    NextStep();

    //初始化外部IO P33
    Gpio_InitIOExt(3, 3, GpioDirIn, TRUE, FALSE, FALSE, 0);
    
    //开启GPIO中断
    Gpio_ClearIrq(3, 3);
    Gpio_EnableIrq(3, 3, GpioIrqRising);
    EnableNvic(PORT3_IRQn, DDL_IRQ_LEVEL_DEFAULT, TRUE);
		//Lpm Cfg
    stcLpmCfg.enSEVONPEND   = SevPndDisable;
    stcLpmCfg.enSLEEPDEEP   = SlpDpEnable;
    stcLpmCfg.enSLEEPONEXIT = SlpExtDisable;
    Lpm_Config(&stcLpmCfg);
	Lpm_GotoLpmMode();
    while (1)
	{
		 if(g_key_flag)
        {
            g_key_flag = 0;

            // uint8_t txBuf[2] = {0xAA, 0x55}; // 示例数据

            // // 唤醒 CC1101
            // CC1101_WakeUp();
            // delay1ms(2); // 等待稳定

            // // 发送一次数据
            // CC1101_Tx(txBuf, sizeof(txBuf));

            // // 发送完再进入休眠
            // CC1101_Strobe(CC1101_SPWD);
			for(  i = 0; i < 6; i++ )
			{
				led_red_flashing( );
				led_green_flashing( );
				delay1ms( 500 );
			}
			drv_led_off( LED_RED );
			drv_led_off( LED_GREEN );
			Lpm_GotoLpmMode();
        }
	}
}
void Gpio_IRQHandler(uint8_t u8Param)
{
   *((uint32_t *)((uint32_t)&M0P_GPIO->P0ICLR + u8Param * 0x40)) = 0;
		g_key_flag = 1;
		drv_led_init( );
//	if (TRUE == Gpio_GetIrqStat(BUTOTN_GPIO_PORT, BUTTON_GPIO_PIN)) {
//   	Gpio_ClearIrq(BUTOTN_GPIO_PORT, BUTTON_GPIO_PIN);
//		g_key_flag = 1;
//		drv_led_init( );

//	}
}
// void Gpio_IRQHandler(uint8_t u8Param)
// {
//     *((uint32_t *)((uint32_t)&M0P_GPIO->P0ICLR + u8Param * 0x40)) = 0;
// //	if (TRUE == Gpio_GetIrqStat(BUTOTN_GPIO_PORT, BUTTON_GPIO_PIN)) {
// //    	Gpio_ClearIrq(BUTOTN_GPIO_PORT, BUTTON_GPIO_PIN);
// //		g_key_flag = 1;
// //		drv_led_init( );

// //	}
// }